// src\utils\axios.js
import axios from 'axios' //引入Axios
import { Toast } from 'vant' //引入Vant组件库的提示组件Toast
import router from '../router' //引入路由实例

// 是否为生产环境，如果是则以 “:” 前的作为基础路径，不是则以 “:” 后的作为基础路径
axios.defaults.baseURL = process.env.NODE_ENV == 'development' ? '//localhost:8080/api/v1' : '//localhost:8080/api/v1'
// 表示诳语请求时是否需要使用凭证
axios.defaults.withCredentials = true
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
// 自动给每个请求设置token，如果本地存储有就设置，没有就设置为空
axios.defaults.headers['token'] = localStorage.getItem('token') || ''
axios.defaults.headers.post['Content-Type'] = 'application/json'

// 拦截器，每个请求都会被拦截
axios.interceptors.response.use(res => {
  //若响应头内的data不为object，则视为服务器端异常，这里直接通过 Promise.reject 抛出错误
  if (typeof res.data !== 'object') {
    Toast.fail('服务端异常！')
    return Promise.reject(res)
  }
  if (res.data.resultCode != 200) {
    //若有data，并且resultCode 不等于200，就表示请求通过了，但是响应失败
    if (res.data.message) Toast.fail(res.data.message)
    // 本项目的返回码为 416，表示未登录，所以这里在未登录的情况下跳转到login登录页面
    if (res.data.resultCode == 416) {
    //   window.vRouter.push({ path: '/login' })
      router.push({ path: '/login' })
    }
    // 最后通过Promise.reject抛出，前端可以通过链式调用 catch 捕获错误
    return Promise.reject(res.data)
  }
//   其他情况一律返回data数据
  return res.data
})

export default axios
